package com.asia5b.a5mall.middleware.api

import com.asia5b.a5mall.middleware.model.base.ResultModel
import com.asia5b.a5mall.middleware.model.cart.CartAllModel
import com.asia5b.a5mall.middleware.model.order.DiffDetailModel
import io.reactivex.Observable
import okhttp3.ResponseBody
import retrofit2.http.*

/**
 * Created by zhangyuncai on 2019/12/21.
 * @Note   购物车Api
 */
interface CartApi {

    /**
     * @api
     * 设置全部商为选中或不选中
     * @param checked 是否选中
     */
    @POST("trade/carts/checked")
    fun setAllCheck(@Query("checked") checked: Int): Observable<ResponseBody>


    /**
     * @api
     * 更新购物车中的多个产品
     * @param sku_id 产品id数组
     * @param checked 是否选中
     * @param num 产品数量
     */
    @POST("trade/carts/sku/{sku_id}")
    fun updateItemState(@Path("sku_id") skuId: String, @Query("checked") checked: Int?, @Query("num") num: Int?): Observable<ResponseBody>


    /**
     * @Note   批量设置某商家的商品为选中或不选中
     * @param   sellerId    卖家id
     * @param   checked    是否选中
     */
    /**
     * @api
     * 批量设置某商家的商品为选中或不选中
     * @param seller_id 卖家id
     * @param checked 是否选中
     */
    @POST("trade/carts/seller/{seller_id}")
    fun updateSellerGoods(@Path("seller_id") sellerId: Int, @Query("checked") checked: Int): Observable<ResponseBody>

    /**
     * @api
     * 向购物车中添加一个产品
     * @param sku_id 产品ID
     * @param num 此产品的购买数量
     * @param activity_id 默认参与的活动id
     */
    @POST("trade/carts")
    fun add(@Query("sku_id") skuId: Int, @Query("num") num: Int, @Query(value = "activity_id") id: Int?): Observable<ResponseBody>


    /**
     * @Note   获取购物车列表 第一个接口:/trade/carts/all  第二个接口:/trade/carts/checked
     * @param   showType    显示方式 all:购物车全部  checked:选中的商品
     * @param way BUY_NOW:立即购买   CART:加入购物车购买
     */
    @GET("trade/carts/{show_type}")
    fun getCartData(@Path("show_type") showType: String, @Query(value = "way") way: String = "CART"): Observable<CartAllModel>

    /**
     * @api
     * 获取运输方式
     * @param region_id 地址id
     * @param house_id 仓库id
     * @param way 结算页面方式，BUY_NOW：立即购买，CART：购物车
     */
    @GET("trade/carts/getCata")
    fun getTrans(@QueryMap map: MutableMap<String, Any>): Observable<CartAllModel>

    /**
     * @api
     * 获取费用计算接口
     * @param goodscata_id 运输方式id
     * @param payment_num 一次付款:1 二次付款:2
     * @param way 结算页面方式，BUY_NOW：立即购买，CART：购物车
     */
    @GET("trade/carts/getPrice")
    fun getPrice(@QueryMap map: MutableMap<String, Any>): Observable<CartAllModel>

//    @GET("trade/carts/getPrice")
//    fun getPrice(@Query(value = "payment_num") payment_num: Int = 1
//                 , @Query(value = "way") way: String = "CART"
//                 , @Query(value = "region_id") region_id: Any
//                 , @Query(value = "house_id") house_id: Any
//                 , @Query(value = "goodscata_id") goodscata_id: Any): Observable<CartAllModel>

    /**
     * @api
     * 支付详情页
     * @param order_id 订单ID
     */
    @GET("packager/payment_list")
    fun getDiffDetail(@Query(value = "order_id") order_id: Int): Observable<ResultModel<DiffDetailModel>>

    /**
     * @api
     * 清空购物车
     */
    @DELETE("trade/carts")
    fun cleanCart(): Observable<ResponseBody>


    /**
     * @api
     * 删除购物车中的一个或多个产品
     * @param sku_ids 产品id，多个产品可以用英文逗号：(,) 隔开
     */
    @DELETE("trade/carts/{sku_ids}/sku")
    fun delete(@Path("sku_ids") skuIds: String): Observable<ResponseBody>


    /**
     * @Note   立即购买
     * @param   skuId    产品ID
     * @param   num    此产品的购买数量
     * @param   activityId    默认参与的活动id
     */
    /**
     * @api
     * 立即购买
     * @param sku_id 产品ID
     * @param num 此产品的购买数量
     * @param activity_id 默认参与的活动id
     */
    @POST("trade/carts/buy")
    fun buy(@Query("sku_id") skuId: Int, @Query("num") num: Int, @Query(value = "activity_id") id: Int?): Observable<ResponseBody>

}